
//01 是国五， 33 是是数据格式(0x33，高四位3代表地址长度3，底四位3表示数据长度3，具体内容不固定)，02 3A 7E 是地址，00 00 02 是数据的长度，E0 2E 是数据；
//我需要提取地址信息02 3A 7E，数据长度00 00 02，数据E0 2E；这部分用C语言如何实现？
//
#include <stdio.h>
//输入数据  input
//输出数据 output
//返回值  读取到的数据的长度
int get_value(char* input, char* output) {
	int ptr = 0;
	int type_flag = input[ptr];
	ptr++;// 标志位，
	unsigned char len_flag = input[ptr];
	ptr++;
	int addr_len = (len_flag >> 4) & 0x0f;
	int len_len = len_flag & 0x0f;
	//假设最大长度4字节，一般足够，如果不够，就定义为int64类型。
	int address = 0;
	for (int i = 0; i < addr_len; i++) { //注意大小端问题，这里用大端模式
		address <<= 8;
		address |= input[ptr];
		ptr++;
	}
	//address 读取完成，怎么处理看具体需求了

	int length = 0;
	for (int i = 0; i < len_len; i++) {
		length <<= 8;
		length |= input[ptr];
		ptr++;
	}
	//length 读取完成
	for (int i = 0; i < length; i++) {
		output[i] = input[ptr];
		ptr++;
	}
	return length;
}

int main() {
	char in[] = {0x01, 0x33, 0x02, 0x3A, 0x7E, 0x00, 0x00, 0x02, 0xE0, 0x2E};
	char out[16];
	int len, i;
	len = get_value((char *)in, (char *)out);
	for (i = 0; i < len; i++) printf("0x%02X ", (unsigned char)out[i]);
	return 0;
}
//0xE0 0x2E
